#ifndef NOT_H_
#define NOT_H_

#include "requirement.h"
#include <boost/shared_ptr.hpp>

using boost::shared_ptr;

/// Logical negation of a requirement.
class Not : public Requirement {
    /// Requirement to be negated
    shared_ptr<Requirement> req_;
    
public:
    Not(shared_ptr<Requirement>);
    
    bool evaluate(Context&);
    std::string to_string(Context&);
    std::size_t count(Context&);
    std::list<Course> courses();
};

#endif
